ÉeÉNÉjÉJÉãQ&A

NW56 - ARA/PPP ÉpÉXÉèÅ[ÉhÇ÷ÇÃÉAÉNÉZÉX
(1999 îN 2 åé 1 ì˙çXêV)


Q: åªç›äJî≠íÜÇÃÉRÅ[ÉhÇ≈ÇÕÅAARA/PPP Ç…ÇÊǡǃégópÇ≥ÇÍÇÈÉpÉXÉèÅ[ÉhÇê›íËÇ∑ÇÈïKóvǙdžÇÈÇÃÇ≈Ç∑Ç™ÅAÇ«ÇÃÉhÉLÉÖÉÅÉìÉeÅ[ÉVÉáÉìÇå©ÇƒÇ‡ÅADZÇÃÉpÉXÉèÅ[ÉhǙǫÇÃÇÊǧDžìÆçÏÇ∑ÇÈÇÃÇ©è⁄ǵÇ≠ê‡ñæÇ≥ÇÍǃǢNjÇπÇÒÅBÉpÉXÉèÅ[ÉhÉäÉ\Å[ÉXÇÃçÏê¨ï˚ñ@Çã≥ǶǃÇ≠ÇæÇ≥Ç¢ÅB

A: ê›íËÇ≥ÇÍÇΩ OpenTransport Çà ARA/PPP ÉpÉXÉèÅ[ÉhÇÕÅgÉäÉÇÅ[ÉgÉAÉNÉZÉXÅhèâä˙ê›íËÉtÉHÉãÉ_ì‡Ç…džÇÈ "ÉäÉÇÅ[ÉgÉAÉNÉZÉXê⁄ë±ÉtÉ@ÉCÉã" Çà 'pass' ÉäÉ\Å[ÉXÇ…äiî[Ç≥ÇÍǃǢNjÇ∑ÅBARA ÉoÅ[ÉWÉáÉì 2.0 à»ç~ÅA'pass' ÉäÉ\Å[ÉXÇÃÉTÉCÉYÇÕ 256 ÉoÉCÉgÇ…ägí£Ç≥ÇÍNjǵÇΩÅB

é¿ç€ÇÃÉpÉXÉèÅ[ÉhÉfÅ[É^ÇÕ ECB (Electronic Code Book) ÉÇÅ[ÉhÇà DES (Data Encryption Standard) ÉAÉãÉSÉäÉYÉÄÇégǡǃÉGÉìÉRÅ[ÉhÇ≥ÇÍǃǢNjÇ∑ÅBà√çÜâªÇ…ëŒÇ∑ÇÈÉLÅ[ÉXÉPÉWÉÖÅ[ÉãÇÕ ARA/PPP ÇÃê›íËÉÜÅ[ÉUñºÇÃêÊì™ 56 ÉrÉbÉg (7 ÉoÉCÉg) Ç©ÇÁì±èoÇ≥ÇÍÇ‹Ç∑ÅB

åªç›ÇÃÇΔDZÇÎÅAARA ÉpÉXÉèÅ[ÉhÇÉGÉìÉRÅ[ÉhÇ∑ÇÈ OpenTransport API ÇÕë∂ç›ÇµÇ‹ÇπÇÒÅBÇΩÇæÇµÅAÉpÉXÉèÅ[ÉhÇÕ DES Çà ECB ÉÇÅ[ÉhÇégǡǃÉGÉìÉRÅ[ÉhÇ≥ÇÍǃǢÇÈÇΩÇflÅAà»ëOÇà "Apple Remote Access API" Çà PassWordMunger ä÷êîÇégǡǃÅAÉÇÉ_ÉìÇ» ARA/PPP ÉpÉXÉèÅ[ÉhÇÉGÉìÉRÅ[ÉhÇ∑ÇÈDZÇΔÇ™â¬î\Ç≈Ç∑ÅB

ÉpÉXÉèÅ[ÉhÇìKêÿÇ…ÉGÉìÉRÅ[ÉhÇ∑ÇÈÇ…ÇÕÅAÇ‹Ç∏ÉpÉXÉèÅ[ÉhÉfÅ[É^Ç 256 ÉoÉCÉgÉoÉbÉtÉ@Ç…É[ÉçÉpÉbÉhÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBDZÇÃå„ÇÕÅAÉÜÅ[ÉUñºï∂éöóÒÇÉLÅ[ÇΔǵǃégópǵǃÉNÉäÉAÉeÉLÉXÉgÇÃÉpÉXÉèÅ[ÉhÇ 1 ìxÇ… 8 ÉoÉCÉgÇ∏ǬÉGÉìÉRÅ[ÉhǵÅA256ÉoÉCÉgÇ∑Ç◊ǃǙèàóùÇ≥ÇÍÇÈÇ‹Ç≈ÉGÉìÉRÅ[ÉhÇÃåãâ Ç 'pass' ÉäÉ\Å[ÉXÇ…í«â¡ÇµÇ‹Ç∑ÅBDZÇÃèàóùÇ™äÆóπǵÇΩÇΔDZÇÎÇ≈ÅA'pass' ÉäÉ\Å[ÉXÇÃêÊì™ÉoÉCÉgÇÉ[ÉçÉAÉEÉgǵNjÇ∑ÅB

éüÇÃÉTÉìÉvÉãÉRÅ[ÉhÇÕDZÇÃÉvÉçÉZÉXÇãÔëÃìIÇ…é¶ÇµÇƒÇ¢Ç‹Ç∑ÅB


#include <RemoteAccessInterface.h>
// ---------------------------------------------------------------------------
OSErr EncodeARApassword ( UInt8 *userName, UInt8 *password, UInt8 *outbuf )
// ---------------------------------------------------------------------------
//
// DZÇÃÉãÅ[É`ÉìÇÕÉpÉXÉèÅ[ÉhÇÉäÉÇÅ[ÉgÉAÉNÉZÉXê⁄ë±Çà 'pass' ÉäÉ\Å[ÉXÇ…
// äiî[Ç∑ÇÈÇÃÇ…ìKǵÇΩÉtÉHÅ[É}ÉbÉgÇ…ÉGÉìÉRÅ[ÉhÇ∑ÇÈ
// DZÇÃÉãÅ[É`ÉìÇ≈ÇÕÅAà»ëOÇà ARA PassWordMunger API ÇÉCÉìÉNÉäÉÅÉìÉ^ÉãÇ…åƒÇ—èoǵǃÅA
// ÉpÉXÉèÅ[ÉhÇ 256 ÉoÉCÉgÇÃÉuÉçÉbÉNÇ…ïœä∑Ç∑ÇÈ
//

{
    TRemoteAccessPasswordMunger pb;
    UInt8   buffer[9];
    UInt8   inBuffer[256];
    OSErr   err;
    short   i;
    short   offset = 1;

    // ïœä∑ÉoÉbÉtÉ@ÇÉ[ÉçÉAÉEÉgÇ∑ÇÈ
    for (i = 0; i < sizeof inBuffer ; i++) inBuffer[i] = 0;

    // ÉpÉXÉèÅ[ÉhÇíÜÇ…ÉRÉsÅ[Ç∑ÇÈ
    BlockMoveData(password, inBuffer, password[0] + 1);

    // ÉpÉâÉÅÅ[É^ÉuÉçÉbÉNÇÉäÉÇÅ[ÉgÉAÉNÉZÉX API åƒÇ—èoǵDžëŒâûǵǃÉZÉbÉgÉAÉbÉvÇ∑ÇÈ
    pb.csCode           = RAM_EXTENDED_CALL;
    pb.resultStrPtr     = nil;
    pb.extendedType     = (char*) REMOTEACCESSNAME;
    pb.extendedCode     = CmdRemoteAccess_PassWordMunger;
    pb.userNamePtr      = userName;
    pb.passWordPtr      = buffer;
    pb.reserved         = 0;

    // 1 ìxÇ… 8 ÉoÉCÉgÇ∏ǬèàóùÇ∑ÇÈ
    for (i = 0; i < 32 ; i++)
    {
        BlockMoveData(inBuffer+offset, &buffer[1], 8);
        buffer[0]=8;

        pb.passWordPtr      = buffer;
        err = PBRemoteAccess((TPRemoteAccessParamBlock) &pb, false);
        if (err == noErr)
                err = pb.ioResult;
        if(err != noErr) break;

        BlockMoveData(&buffer[1], outbuf + offset, 8);
        offset+=8;
    }

    outbuf[0]=0;        // êÊì™ÉoÉCÉgÇÕèÌÇ…É[Éç
    return err;
}

égópó· 1Å@ÉÜÅ[ÉUñºÇÉLÅ[ÇΔǵǃégópÇ∑ÇÈÉpÉXÉèÅ[ÉhÇÃà√çÜâª

ÉGÉìÉRÅ[ÉhÇ≥ÇÍÇΩÉpÉXÉèÅ[ÉhÇèàóùǵÇΩå„ÇÕÅAÇ¢Ç≠ǬǩÇÃï˚ñ@Ç≈é¿ç€Çà 'pass' ÉäÉ\Å[ÉXÇê›íËÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB

  1. Å@ç≈LJñ]NjǵǢÇÃÇÕÅAMacOS 8.5 Ç…ëgÇ›çûÇ‹ÇÍǃǢÇÈ Open Transport 2.0 ÇÃÉRÉìÉ|Å[ÉlÉìÉgÇ≈džÇÈ Network Setup API ÇégópÇ∑ÇÈï˚ñ@Ç≈Ç∑ÅBé¿ç€ÅANetwork Setup SDK ÇÕê›íËÉfÅ[É^ÉxÅ[ÉXÇ…ÉAÉNÉZÉXÇ∑ÇÈÇΩÇflÇ…è´óàLJóLå¯Ç»í∑ä˙ìIÉ\ÉäÉÖÅ[ÉVÉáÉìÇ≈Ç∑ÅBDZÇà API ÇÃégópó·ÇÕ DTS ÉTÉìÉvÉãÉRÅ[ÉhÇà More NetworkSetup Ç≈éQèΔÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB

  2. LJǧ 1 ǬÇÃï˚ñ@ÇΔǵǃÅAAppleEvent ÇÉlÉbÉgÉèÅ[ÉNê›íËÉXÉNÉäÉvÉgÇ…ëóêMǵÅAó^ǶÇÁÇÍÇΩç\ê¨Ç…ëŒâûǵÇΩÉpÉXÉèÅ[ÉhÇê›íËÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBDZÇÃï˚ñ@ÇÃãÔëÃó·Çà»â∫Ç…é¶ÇµÇ‹Ç∑ÅBíçà”: ÉlÉbÉgÉèÅ[ÉNê›íËÉXÉNÉäÉvÉgÇÃÉoÅ[ÉWÉáÉì 1.0 ÇÕÉpÉXÉèÅ[ÉhÇìKêÿÇ…ÉGÉìÉRÅ[ÉhǵNjÇπÇÒÅBÉoÅ[ÉWÉáÉì 1.0.2 Ç‹ÇΩÇÕǪÇÍà»è„ÇégópǵǃÇ≠ÇæÇ≥Ç¢ÅB

--setpassword("Configuration", "password")

 on setpassword(configName, thePassword)
        tell application "Network Setup Scripting"
                open database
                begin transaction
                set password of Remote Access configuration
configName to thePassword
                end transaction
                close database
        end tell
end setpassword


  1. ç≈å„ÇÃéËíiÇΔǵǃÅA"ÉäÉÇÅ[ÉgÉAÉNÉZÉXê⁄ë±" ÉtÉ@ÉCÉãÇÉIÅ[ÉvÉìǵǃÅAǪÇÃíÜÇ…íºê⁄ÉpÉXÉèÅ[ÉhÇèëÇ´çûÇfiÇΔǢǧï˚ñ@LJdžÇËÇ‹Ç∑ÅBÇΩÇæÇµÅADZÇÃï˚ñ@ÇÕÉäÉXÉNÇ™ëÂÇ´Ç¢ÇΩÇflÅAÇ≈Ç´ÇÈǩǨÇËégópǵǻǢDZÇΔÇÇ®ä©ÇflǵNjÇ∑ÅBARA ÇÕïKóvÇ…âûÇ∂ǃǢǬÇ≈LJDZÇÃÉtÉ@ÉCÉãÇÉIÅ[ÉvÉìÇ∑ÇÈÇΩÇflÅADZÇÃï˚ñ@Ç≈ÇÕÉtÉ@ÉCÉãÇÃÉäÉ\Å[ÉXÉ}ÉbÉvÇâÛÇ∑ÇΔǢǧÉäÉXÉNÇîΔÇ∑DZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅBÇ‹ÇΩÅAèâä˙ê›íËÉtÉ@ÉCÉãÇÃÉtÉHÅ[É}ÉbÉgÇ™è´óàÇ…ÇÌÇΩǡǃïœçXÇ≥ÇÍǻǢÇΔǢǧï€èÿLJdžÇËÇ‹ÇπÇÒÅB
ç°å„ÅAOpen Transport Network Setup API Ç™ÉpÉXÉèÅ[ÉhÇÉGÉìÉRÅ[ÉhÇ∑ÇÈÇΩÇflÇÃÉCÉìÉ^ÉtÉFÅ[ÉXÇíÒãüÇ∑ÇÈDZÇΔÇ™ä˙ë“Ç≥ÇÍÇ‹Ç∑Ç™ÅAǪÇÍÇ‹Ç≈ÇÕÅAè„èqÇÃégópó·Ç≈ñûë´Ç∑ÇÈǵǩdžÇËÇ‹ÇπÇÒÅB

éQçléëóø Inside Macintosh: Open Transport
ÉTÉìÉvÉãÉRÅ[Éh: MoreNetworkSetup


-- Vinnie Moscaritolo
Worldwide Developer Technical Support